package acciones;

import islenio.IslenioEntornoEstado;
import islenio.IslenioEstado;
import utilidades.Aldea;
import utilidades.Camino;
import frsf.cidisi.faia.agent.search.SearchAction;
import frsf.cidisi.faia.agent.search.SearchBasedAgentState;
import frsf.cidisi.faia.state.AgentState;
import frsf.cidisi.faia.state.EnvironmentState;

public class IrBulovoe  extends SearchAction {
	 public SearchBasedAgentState execute(SearchBasedAgentState s) {
	        IslenioEstado agentState = (IslenioEstado) s;

	        if(Aldea.contiene(agentState.aldeasRecorridas,agentState.Bulovoe)) return null;
	        if(Camino.hayCamino(agentState.getAldeaActual(),agentState.Bulovoe,agentState.listaCaminos)){	        		
	        	agentState.actualizarDistanciaRecorrida(agentState.Bulovoe);
	       		agentState.setAldeaActual(agentState.Bulovoe);
	       		return agentState;
	        	}
	                	        
	        return null;
	    }

	    public EnvironmentState execute(AgentState ast, EnvironmentState est) {

	    	IslenioEstado agentState = (IslenioEstado) ast;
	    	IslenioEntornoEstado environmentState = (IslenioEntornoEstado) est;
	    	
	        if(Aldea.contiene(IslenioEntornoEstado.aldeasRecorridas,agentState.Bulovoe)) return null;
	        if(Camino.hayCamino(agentState.getAldeaActual(),agentState.Bulovoe,agentState.listaCaminos)){
	        		agentState.actualizarDistanciaRecorrida(agentState.Bulovoe);
	        		agentState.setAldeaActual(agentState.Bulovoe);
	        		environmentState.setAldeaActual(IslenioEntornoEstado.Bulovoe);
	        		return environmentState;
	        	}
	        
	        return null;
	    }

	    public Double getCost() {
	        return new Double(0);
	    }

	    public String toString() {
	        return "IrBulovoe";
	    }
}
